/**
 * 
 */
package com.kexinde.wjifen.util;

/**
 * 分页通用类
 * @author vincent
 *
 */
public class PageUtils {
	
	/**
	 * 总页数,查询数据库计算得出
	 */
	private int pageAmount;
	
	/**
	 * 总记录数，查询数据库得出
	 */
	private int amount;
	
	/**
	 * 要拿的第一条记录的index
	 */
	private int first;
	
	/**
	 * 要拿的记录条数
	 */
	private int max;
	
	/**
	 * 预处理sql，需手动设置
	 */
	private String countSql;
	
	/**
	 * 若有预处理参数，需设置
	 */
	private Object[] params;
	
	/**
	 * 构造函数
	 * @param countSql
	 * 统计记录总数sql
	 * @param params
	 * 若有预处理参数，需设置
	 */
	public PageUtils(String countSql , Object[] params){
		this.countSql=countSql;
		this.params=params;
	}
	
	
	
	/**
	 * 计算总页数
	 * @param countCondition
	 * count()里面的条件,如*,distinct filed
	 * @param table
	 * 要计算的表名
	 * @param lineSize
	 * 前端每页要显示的记录条数
	 * @return
	 * 总页数
	 * @throws Exception
	 */
	private int getPageAmount(int lineSize) throws Exception{
		amount = JdbcTemplate.count(countSql, params);
		if(amount%lineSize!=0)
		return amount/lineSize+1;
		else
			return amount/lineSize;
	}
	
	/**
	 * 计算要取的记录范围，得到first,max的值
	 * @param params
	 * 若需要预处理参数，此处设置
	 * @param currentPage
	 * 当前为第几页
	 * @param lineSize
	 * 当前页面显示多少条记录
	 * @throws Exception
	 */
	public void countRange(int currentPage, int lineSize) throws Exception {
		pageAmount = this.getPageAmount(lineSize);
		first=(currentPage-1)*lineSize;
		if (currentPage != pageAmount) {
			max = lineSize;
		}
		else{
			max=amount-(currentPage-1)*lineSize;
		}

	}
	

	public int getPageAmount() {
		return pageAmount;
	}

	public int getAmount() {
		return amount;
	}

	public int getFirst() {
		return first;
	}

	public int getMax() {
		return max;
	}

	public void setCountSql(String countSql) {
		this.countSql = countSql;
	}

	public void setParams(Object[] params) {
		this.params = params;
	}

	
}
